gusucode.com > C++ 宽带自动拨号程序源码 > C++ 宽带自动拨号程序源码/code/Unit1.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <inifiles.hpp> #include "Unit1.h" #include <ras.h> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "SHDocVw_OCX" #pragma link "DialUp" #pragma resource "*.dfm" TfrmMain *frmMain; //--------------------------------------------------------------------------- __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner),m_InitFlag(true),m_RunFlag(false),m_DownloadComplete(false),m_WaitTime(10)//,m_Dialup(NULL) { } __fastcall TfrmMain::~TfrmMain() { } //--------------------------------------------------------------------------- void __fastcall TfrmMain::FormCreate(TObject *Sender) { cbConn->Items = DialUp1->PossibleConnections; //m_Dialup->PossibleConnections; // 装入配置 TIniFile * ini = new TIniFile(getConfigName()); edName->Text = ini->ReadString("Config","Name",""); edPwd->Text = ini->ReadString("Config","Password",""); edURL->Text = ini->ReadString("Config","URL",""); AnsiString strConn = Trim(ini->ReadString("Config","Connect","")); cbConn->ItemIndex = cbConn->Items->IndexOf(strConn); m_WaitTime = ini->ReadInteger("Config","Interval",10); edInterval->Text = m_WaitTime; delete ini; // 确定线路 m_InitFlag = false; } //--------------------------------------------------------------------------- AnsiString __fastcall TfrmMain::getConfigName() { return ExtractFilePath(Application->ExeName) + "config.ini"; } void __fastcall TfrmMain::btAutoClick(TObject *Sender) { // if( !CheckInput() ) return; try { DialUp1->Username = edName->Text; DialUp1->Password = edPwd->Text; DialUp1->ConnectTo = cbConn->Text; m_RunFlag = true; setEnabled(false); while(m_RunFlag) { Dialup(); Application->ProcessMessages(); } } catch(...) { ShowMessage("连接失败,请检查帐号密码和线路是否连接正确!"); InfoLog("连接失败,请检查帐号密码和线路是否连接正确!"); setEnabled(true); } } //--------------------------------------------------------------------------- void __fastcall TfrmMain::SaveConfig() { TIniFile * ini = new TIniFile(getConfigName()); ini->WriteString("Config","Name",edName->Text); ini->WriteString("Config","Password",edPwd->Text); ini->WriteString("Config","URL",edURL->Text); ini->WriteString("Config","Connect",cbConn->Text); ini->WriteInteger("Config","Interval",m_WaitTime); delete ini; } //--------------------------------------------------------------------------- void __fastcall TfrmMain::edNameChange(TObject *Sender) { if( !m_InitFlag ) { SaveConfig(); } } //--------------------------------------------------------------------------- void __fastcall TfrmMain::setEnabled(bool v) { edName->Enabled = v; edPwd->Enabled = v; edURL->Enabled = v; btAuto->Enabled = v; btStop->Enabled = !v; cbConn->Enabled = v; } //--------------------------------------------------------------------------- bool __fastcall TfrmMain::CheckInput() { if( edName->Text.IsEmpty() ) { ShowMessage("您没有输入ADSL账号!请确认"); PageControl1->ActivePage = TabSheet1; edName->SetFocus(); return false; } if( edPwd->Text.IsEmpty() ) { ShowMessage("您没有输入密码!请确认"); PageControl1->ActivePage = TabSheet1; edPwd->SetFocus(); return false; } if( cbConn->Text.IsEmpty() ) { ShowMessage("您没有选择连接线路!请确认"); PageControl1->ActivePage = TabSheet1; cbConn->SetFocus(); return false; } if( edURL->Text.IsEmpty() ) { ShowMessage("您没有输入URL,请确认!"); PageControl1->ActivePage = TabSheet2; edURL->SetFocus(); return false; } return true; } //--------------------------------------------------------------------------- void __fastcall TfrmMain::Dialup() { InfoLog("开始拨号..."); DialUp1->GoOffline(); if( DialUp1->GoOnline() ) { AnsiString strConn; do { strConn = DialUp1->CurrentConnection; Delay(1); } while( strConn == "" && m_RunFlag ); InfoLog(strConn); if( m_RunFlag ) { InfoLog("拨号成功!"); } Delay(10); static AnsiString strIP; strIP = getLocalIP(); InfoLog("IP地址为:"+strIP); LogIP->Lines->Add(strIP); m_DownloadComplete = false; webBrowser->Navigate(WideString(edURL->Text)); while( !m_DownloadComplete && m_RunFlag ) Delay(1); if( m_DownloadComplete ) InfoLog("连接"+edURL->Text+"成功!"); Delay(10); InfoLog("断线!"); DialUp1->GoOffline(); do { strConn = DialUp1->CurrentConnection; Delay(1); } while( strConn != "" && m_RunFlag ); for(int i=0; i < m_WaitTime && m_RunFlag; i++) { InfoLog("等了第 " + IntToStr(i) + " 秒"); Delay(20); } } else throw ""; } //--------------------------------------------------------------------------- #define NAME_SIZE 255 AnsiString __fastcall TfrmMain::getLocalIP() { AnsiString strIP; RASPPPIP * lpProjection = new RASPPPIP(); memset(lpProjection,0,sizeof(RASPPPIP)); lpProjection->dwSize = sizeof(RASPPPIP); DWORD dwCB = 256; DWORD dwRet = RasGetProjectionInfo((HRASCONN)DialUp1->HRasConn,RASP_PppIp,lpProjection,&dwCB); if( dwRet == 0 ) strIP = lpProjection->szIpAddress; else strIP = "没有取到IP"; delete lpProjection; return strIP; } //--------------------------------------------------------------------------- void __fastcall TfrmMain::Button1Click(TObject *Sender) { webBrowser->Navigate(WideString(edURL->Text)); } //--------------------------------------------------------------------------- AnsiString __fastcall TfrmMain::getDateTimeString() { return FormatDateTime("yyyy-mm-dd hh:nn:ss",Now()); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::InfoLog(const AnsiString & aInfo) { static AnsiString strInfo; strInfo = FormatDateTime("yyyy-mm-dd hh:nn:ss ",Now()); strInfo += aInfo; LogInfo->Lines->Add(strInfo); Application->ProcessMessages(); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::Delay(int aCount) { for(int i=0; i<aCount ; i++) { Sleep(50); Application->ProcessMessages(); } } //--------------------------------------------------------------------------- void __fastcall TfrmMain::btStopClick(TObject *Sender) { webBrowser->Stop(); m_RunFlag = false; setEnabled(true); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::btCleanClick(TObject *Sender) { LogInfo->Clear(); LogIP->Clear(); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::edIntervalChange(TObject *Sender) { m_WaitTime = edInterval->Text.ToIntDef(10); if( !m_InitFlag ) { SaveConfig(); } } //--------------------------------------------------------------------------- void __fastcall TfrmMain::webBrowserDocumentComplete(TObject *Sender, LPDISPATCH pDisp, Variant *URL) { //如果网页装载完成 m_DownloadComplete = true; } //---------------------------------------------------------------------------